`:top
Die `!Java Cryptography Extension`! (`!JCE`!) ist eine `F33f`_`[Schnittstelle`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Programmierschnittstelle]`_`f der `F33f`_`[Programmiersprache`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Programmiersprache]`_`f `F33f`_`[Java`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Java_(Programmiersprache)]`_`f und `F33f`_`[Framework`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Framework]`_`f für kryptographische Aufgaben wie `F33f`_`[Verschlüsselung`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Verschlüsselung]`_`f, Kommunikations-`F33f`_`[Authentifizierung`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Authentifizierung]`_`f und `F33f`_`[Schlüssel`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Schlüssel_(Kryptologie)]`_`fverwaltung. Seit dem `F33f`_`[JDK`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Java_Development_Kit]`_`f 1.4 ist sie Teil der `F33f`_`[Java Platform, Standard Edition`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Java_Platform,_Standard_Edition]`_`f, davor war sie (ab JDK 1.2) als optionales Paket erhältlich.
Die Java Cryptography Extension beruht auf derselben Architektur wie die Java Cryptography Architecture (JCA) und wird als Teil der JCA gesehen. Die Aufteilung in JCA und JCE war nötig, weil die USA früher den Export kryptographischer Systeme beschränkten. Die JCA enthält nur `F33f`_`[Hashfunktionen`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Hashfunktion]`_`f, Schlüsselgeneratoren usw. und durfte frei exportiert werden. Für starke Verschlüsselungsalgorithmen galt dies nicht; deshalb lagerte man sie in die JCE aus. Implementierungen mussten von anderer Stelle bezogen werden.
Wie die Klassen der JCA liegen die der JCE heute in den Packages `B100`F9d9java.security`f`b und `B100`F9d9javax.crypto`f`b.
>>Contents
• `F0af`_`[Funktionalität`#funktionalit-t]`_`f
• `F0af`_`[Beispiel`#beispiel]`_`f
• `F0af`_`[Literatur`#literatur]`_`f
• `F0af`_`[Weblinks`#weblinks]`_`f
• `F0af`_`[Einzelnachweise`#einzelnachweise]`_`f
-─
>>Funktionalität
Die Java Cryptography Extension basiert auf sogenannten Kryptographie-Providern, das sind Implementierungen von verschiedenen, durch die JCE abstrahierten kryptographischen Konzepten. Neue Konzepte können leicht hinzugefügt werden.
Die Java Cryptography Extension bietet folgende Funktionalitäten:
• `*Cipher`* – Kryptographische `F33f`_`[Algorithmen`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Algorithmus]`_`f (`F33f`_`[symmetrische`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Symmetrisches_Kryptosystem]`_`f und `F33f`_`[asymmetrische`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Asymmetrisches_Kryptosystem]`_`f) zum Verschlüsseln, `F33f`_`[Block-`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Blockverschlüsselung]`_`f und `F33f`_`[Streamchiffren`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Stromverschlüsselung]`_`f
• `*Key Management`* – Die Klassen `B100`F9d9KeyGenerator`f`b für die Schlüsselgenerierung, `B100`F9d9KeyAgreement`f`b zum sicheren Aushandeln von Schlüsseln sowie `B100`F9d9SecretKeyFactory`f`b zur Zerlegung von Schlüsseln in ihre Anteile
• `*Message Authentication Codes`* – zur Berechnung von Authentifizierungen für Kommunikationen
• Sichere Objekte und `F33f`_`[digitale Signaturen`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Digitale_Signatur]`_`f
Die Java Cryptography Extension ist, wie auch die Java Cryptography Architecture, von der Implementierung der konkreten Algorithmen unabhängig. Über ein `F33f`_`[Service Provider Interface`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Service_Provider_Interface]`_`f (SPI) können unterschiedliche Implementierungen von unterschiedlichen Herstellern gleichzeitig in die Java-Laufzeitumgebung eingebunden werden. Java wird ab Version 1.4 mit einer JCE und JCA Implementierung ausgeliefert, andere Implementierungen können aber einfach sowohl statisch als auch dynamisch nachgeladen werden.
Zu den bekanntesten JCE-Implementierungen gehören:
• `*`F33f`_`[Bouncy Castle`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Bouncy_Castle]`_`f`* – eine `F33f`_`[Open-Source`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Open_Source]`_`f-Implementierung der `*Java Cryptography Extension`* und eine „leichtgewichtige“ Java-Cryptography-API für J2ME und JDK.`:cite-ref-1[`F5bf`_`[1`#cite-note-1]`_`f]
• IAIK-JCE – eine Implementierung des Instituts für Angewandte Informationsverarbeitung und Kommunikationstechnologie (IAIK) der `F33f`_`[Technischen Universität Graz`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Technische_Universität_Graz]`_`f.`:cite-ref-2[`F5bf`_`[2`#cite-note-2]`_`f]
>>Beispiel
Das folgende Beispiel zeigt die Verschlüsselung und Entschlüsselung eines `F33f`_`[Strings`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Zeichenkette]`_`f mittels `F33f`_`[AES`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Advanced_Encryption_Standard]`_`f-`F33f`_`[CBC`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Cipher_Block_Chaining_Mode]`_`f mit `F33f`_`[Padding`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Padding_(Informatik)]`_`f nach `F33f`_`[PKCS`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=PKCS]`_`f #7:
`B100`F9d9// Schlüssel erzeugen`f`b
`B100`F9d9SecretKey secretKey = KeyGenerator.getInstance("AES").generateKey();`f`b
`B100`F9d9`f`b
`B100`F9d9// Verfahren wählen`f`b
`B100`F9d9Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7PADDING");`f`b
`B100`F9d9cipher.init(Cipher.ENCRYPT_MODE, secretKey);`f`b
`B100`F9d9`f`b
`B100`F9d9// Umwandlung des Strings nach Bytes basierend auf UTF-8`f`b
`B100`F9d9byte[] utf8Bytes = "Zu verschlüsselnder String".getBytes("UTF8");`f`b
`B100`F9d9`f`b
`B100`F9d9// Verschlüsselung`f`b
`B100`F9d9byte[] encryptedBytes = cipher.doFinal(utf8Bytes);`f`b
`B100`F9d9`f`b
`B100`F9d9// Base64 encoding um wieder einen String zu bekommen`f`b
`B100`F9d9String encryptedString = java.util.Base64.getEncoder().encodeToString(encryptedBytes);`f`b
`B100`F9d9`f`b
`B100`F9d9// Cipher für Entschlüsselung vorbereiten`f`b
`B100`F9d9cipher.init(Cipher.DECRYPT_MODE, secretKey);`f`b
`B100`F9d9`f`b
`B100`F9d9// Rückumwandlung in Byte-Array`f`b
`B100`F9d9encryptedBytes = java.util.Base64.getDecoder().decode(encryptedString);`f`b
`B100`F9d9`f`b
`B100`F9d9// Entschlüsselung`f`b
`B100`F9d9utf8Bytes = cipher.doFinal(encryptedBytes);`f`b
`B100`F9d9`f`b
`B100`F9d9// Rückumwandlung in einen String`f`b
`B100`F9d9return new String(utf8Bytes, "UTF8");`f`b
>>Literatur
• Jason Weiss: Java Cryptography Extensions. Practical Guide for Programmers. Morgan Kaufmann, 2004, ISBN 978-0-12-742751-5 (englisch).
• Rich Helton, Johennie Helton: Java Security Solutions. Wiley, 2002, ISBN 978-0-7645-4928-1 (englisch).
• David Hook: Beginning Cryptography with Java. John Wiley & Sons, 2005, ISBN 978-0-7645-9633-9 (englisch).
>>Weblinks
• https://docs.oracle.com/javase/6/docs/technotes/guides/security/crypto/CryptoSpec.html Java Cryptography Architecture (JCA) Reference Guide
• https://docs.oracle.com/javase/tutorial/security/index.html – Java Tutorial zu Security im Allgemeinen
• https://docs.oracle.com/javase/7/docs/technotes/guides/security/overview/jsoverview.html – Übersicht über Java Security
>>Einzelnachweise
`:cite-note-1`!1.`! `F0af`_`[↑`#cite-ref-1]`_`f JCE Provider der australischen Organisation The Legion of the Bouncy Castle
`:cite-note-2`!2.`! `F0af`_`[↑`#cite-ref-2]`_`f IAIK-JCE Provider der TU Graz
`c`F0af`_`[↑ Back to top`#top]`_`f`a